#include "db.h"

Db::Db(){
    connect();
}
bool Db::connect() {
    // 添加MySQL数据库驱动
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    // 设置数据库连接信息
    db.setHostName(host);
    db.setDatabaseName(database);
    db.setUserName(username);
    db.setPassword(password);
    db.setPort(port);

    // 连接数据库
    if (!db.open()) {
        qDebug() << "数据库连接失败：" << db.lastError().text();
        return false;
    }

    qDebug() << "数据库连接成功！";
    return true;
}
Db::~Db() {
}


// 更新数据
void updateData(int id, int newAge) {
    QSqlQuery query;
    query.prepare("UPDATE users SET age = :age WHERE id = :id");
    query.bindValue(":age", newAge);
    query.bindValue(":id", id);

    if (!query.exec()) {
        qDebug() << "更新数据失败：" << query.lastError().text();
    } else {
        qDebug() << "数据更新成功，影响行数：" << query.numRowsAffected();
    }
}

// 插入数据
void insertData(const QString& name, int age, const QString& email) {
    QSqlQuery query;
    // 使用参数化查询防止SQL注入
    query.prepare("INSERT INTO users (name, age, email) VALUES (:name, :age, :email)");
    query.bindValue(":name", name);
    query.bindValue(":age", age);
    query.bindValue(":email", email);

    if (!query.exec()) {
        qDebug() << "插入数据失败：" << query.lastError().text();
    } else {
        qDebug() << "数据插入成功，ID：" << query.lastInsertId().toInt();
    }
}

// 查询数据
QVector<QMap<QString, QVariant>> Db::query(const QString& sql) {

    QVector<QMap<QString, QVariant>> listData;
    QSqlQuery query;

    if (!query.exec(sql)) {
        qDebug() << "查询数据失败：" << query.lastError().text();
        return listData;
    }

    // 获取查询结果的元数据（包含字段信息）
    QSqlRecord record = query.record();
    int fieldCount = record.count(); // 获取字段总数

    qDebug() << "\n查询结果（共" << fieldCount << "个字段）：";
    while (query.next()) {
        QMap<QString, QVariant> rowData;

        // 遍历所有字段，动态添加键值对
        for (int i = 0; i < fieldCount; ++i) {
            QString fieldName = record.fieldName(i); // 获取字段名
            QVariant fieldValue = query.value(i);    // 获取字段值
            rowData[fieldName] = fieldValue;
        }

        listData.push_back(rowData);
    }
    qDebug() << "查结果处理成功：";
    return listData;
}

// 删除数据
void deleteData(int id) {
    QSqlQuery query;
    query.prepare("DELETE FROM users WHERE id = :id");
    query.bindValue(":id", id);

    if (!query.exec()) {
        qDebug() << "删除数据失败：" << query.lastError().text();
    } else {
        qDebug() << "数据删除成功，影响行数：" << query.numRowsAffected();
    }
}
